archivo <- './data/Datos-dax-nasdaq-originales.xlsx'
dax_nasdaq_dow <- read_excel(archivo, col_names = TRUE)
names(dax_nasdaq_dow)
## [1] "Fecha" "DAX 30 PERFORMANCE - PRICE INDEX"
## [3] "NASDAQ COMPOSITE - PRICE INDEX"
names(dax_nasdaq_dow) <- c("Fecha", "DAX", "NASDAQ")
names(dax_nasdaq_dow)
## [1] "Fecha" "DAX" "NASDAQ"
summary(dax_nasdaq_dow)
## Fecha DAX NASDAQ
## Min. :1971-02-05 00:00:00 Min. : 372.3 Min. : 54.87
## 1st Qu.:1983-07-21 18:00:00 1st Qu.: 710.9 1st Qu.: 247.13
## Median :1996-01-04 12:00:00 Median : 2320.2 Median : 1057.44
## Mean :1996-01-05 02:24:00 Mean : 4048.6 Mean : 1877.67
## 3rd Qu.:2008-06-19 06:00:00 3rd Qu.: 6351.3 3rd Qu.: 2508.07
## Max. :2020-12-03 00:00:00 Max. :13789.0 Max. :12377.18
indice_dax <- as.numeric(unlist(dax_nasdaq_dow[,"DAX"]))
rend_log_dax <- diff(log(indice_dax))
#agrego un 0 al principio para poder agregar la columna de rendimientos al dataframe original
rend_log_dax <- c(0, rend_log_dax)
indice_nasdaq <- as.numeric(unlist(dax_nasdaq_dow[,"NASDAQ"]))
rend_log_nasdaq <- diff(log(indice_nasdaq))
#agrego un NA al principio para poder agregar la columna de rendimientos al dataframe original
rend_log_nasdaq <- c(0, rend_log_nasdaq)
df_dax_nasdaq_dow <- cbind(dax_nasdaq_dow,
rdto_dax=rend_log_dax,
rdto_nasdaq=rend_log_nasdaq
)
# reordenamos columnas
df_dax_nasdaq_dow <- df_dax_nasdaq_dow[, c(1, 2, 4, 3, 5)]
head(df_dax_nasdaq_dow)
Se muestran las estadísticas principales del dataset.
summary(df_dax_nasdaq_dow)
## Fecha DAX rdto_dax
## Min. :1971-02-05 00:00:00 Min. : 372.3 Min. :-0.1370990
## 1st Qu.:1983-07-21 18:00:00 1st Qu.: 710.9 1st Qu.:-0.0055691
## Median :1996-01-04 12:00:00 Median : 2320.2 Median : 0.0002207
## Mean :1996-01-05 02:24:00 Mean : 4048.6 Mean : 0.0002508
## 3rd Qu.:2008-06-19 06:00:00 3rd Qu.: 6351.3 3rd Qu.: 0.0065904
## Max. :2020-12-03 00:00:00 Max. :13789.0 Max. : 0.1079747
## NASDAQ rdto_nasdaq
## Min. : 54.87 Min. :-0.1314915
## 1st Qu.: 247.13 1st Qu.:-0.0041536
## Median : 1057.44 Median : 0.0007315
## Mean : 1877.67 Mean : 0.0003706
## 3rd Qu.: 2508.07 3rd Qu.: 0.0058327
## Max. :12377.18 Max. : 0.1325465
Estadísticas más completas del rendimiento del índice dax
#Cálculo simple de estadíticos descriptivos
min <- min(df_dax_nasdaq_dow$rdto_dax, na.rm = TRUE)
q1 <- quantile(df_dax_nasdaq_dow$rdto_dax, probs = 0.25, na.rm = TRUE)
media <- mean.default(df_dax_nasdaq_dow$rdto_dax, na.rm = TRUE)
media_rec <- mean.default(df_dax_nasdaq_dow$rdto_dax, trim = 0.025, na.rm = TRUE)
mediana <- median.default(df_dax_nasdaq_dow$rdto_dax, na.rm = TRUE)
moda <- mfv(df_dax_nasdaq_dow$rdto_dax)
var <- var(df_dax_nasdaq_dow$rdto_dax, na.rm = TRUE)
desvest <- sd(df_dax_nasdaq_dow$rdto_dax, na.rm = TRUE)
q3 <- quantile(df_dax_nasdaq_dow$rdto_dax, probs = 0.75, na.rm = TRUE)
max <- max(df_dax_nasdaq_dow$rdto_dax, na.rm = TRUE)
s <- skew(df_dax_nasdaq_dow$rdto_dax)
c <- kurtosi(df_dax_nasdaq_dow$rdto_dax)
#Valores de estadísticos como vector
descriptivos_rdto_dax <- as.numeric(round(c(min, q1, media, media_rec, mediana, moda,
var, desvest, q3, max, s, c),5))
nombres_desc_rdto_dax <- c("Mínimo", "Q1", "Media", "Media recortada", "Mediana", "Moda",
"Varianza", "Desviación Estándar", "Q3", "Máximo", "Simetría", "Curtosis")
cuadro_eda_dax <- as.data.frame(rbind(nombres_desc_rdto_dax,descriptivos_rdto_dax))
tabla_eda_dax <- data.frame(t(cuadro_eda_dax[-1]),row.names = NULL)
colnames(tabla_eda_dax) <- c("Estadístico","rdto_dax")
#tabla_eda_dax
# Generación de una tabla
kable(tabla_eda_dax, align = c("l", "c")) %>%
kable_styling(full_width = F, bootstrap_options = "condensed") %>%
column_spec(1, width = "12em") %>%
column_spec(2, width = "10em")
| Estadístico | rdto_dax |
|---|---|
| Q1 | -0.00557 |
| Media | 0.00025 |
| Media recortada | 0.00036 |
| Mediana | 0.00022 |
| Moda | 0 |
| Varianza | 0.00016 |
| Desviación Estándar | 0.01258 |
| Q3 | 0.00659 |
| Máximo | 0.10797 |
| Simetría | -0.36556 |
| Curtosis | 8.13234 |
Se agregan las columnas correspondientes a los días de la semana.
df_dax_nasdaq_dow <- as_tibble(df_dax_nasdaq_dow)
df_dax_nasdaq_dow <- mutate(df_dax_nasdaq_dow,
dia = weekdays(df_dax_nasdaq_dow$Fecha, abbreviate = FALSE)
)
df_dax_nasdaq_dow$dia[df_dax_nasdaq_dow$dia == "miércoles"] <- "miercoles"
head(df_dax_nasdaq_dow)
Se ordenan los días de la semana.
## [1] "viernes" "lunes" "martes" "miercoles" "jueves"
## [1] "lunes" "martes" "miercoles" "jueves" "viernes"
Se generan valores binarios para los días de la semana.
df_dax_nasdaq_dow_dummies <- df_dax_nasdaq_dow %>%
mutate(var = 1) %>% # Asigno un 1 en todas las filas de una columna
spread(key = dia, value = var, fill = 0) %>% # Creo las variables dummy
# Reordeno y elimino lunes
dplyr::select(Fecha, DAX, rdto_dax, NASDAQ, rdto_nasdaq, martes, miercoles, jueves, viernes)
head(df_dax_nasdaq_dow_dummies)
Para el cálculo de la regresión se descartan las columnas Fecha, DAX y NASDAQ, quedando seleccionadas solamente las columnas de los días y la correspondiente al Rendimiento DAX.
analysis_dax <- df_dax_nasdaq_dow_dummies %>% dplyr::select(-Fecha,-DAX,-NASDAQ,-rdto_nasdaq)
head(analysis_dax)
Se calculan los valores de correlación entre los días de la semana y el rendimiento.
cor(analysis_dax)
## rdto_dax martes miercoles jueves viernes
## rdto_dax 1.000000000 0.006515476 0.006913422 -0.003329002 0.0115477
## martes 0.006515476 1.000000000 -0.250000000 -0.250000000 -0.2500000
## miercoles 0.006913422 -0.250000000 1.000000000 -0.250000000 -0.2500000
## jueves -0.003329002 -0.250000000 -0.250000000 1.000000000 -0.2500000
## viernes 0.011547696 -0.250000000 -0.250000000 -0.250000000 1.0000000
Se observa una correlación negativa del día jueves.
library(GGally)
ggpairs(analysis_dax, lower = list(continuous = "smooth"),
diag = list(continuous = "barDiag"), axisLabels = "none")
Se genera la regresión lineal con el objetivo de explicar los valores de rdto_dax en base a las variables dicotómicas independientes correspondientes a los días de la semana. En este caso se tiene la ecuación \(R_t = \beta_2 M_t + \beta_3 X_t + \beta_4 J_t + \beta_5 V_t + \epsilon_t\) Las variables \(M_t\), \(X_t\), \(J_t\) y \(V_t\) son las variables dummy asociadas a los días de la semana, tomando valor 1 si la observación corresponde a dicho día y 0 en otro caso. Los coeficientes \(\beta_2, \beta_3, \beta_4\) y \(\beta_5\) representan los rendimientos medios de cada día. El término de error se representa mediante \(\epsilon_t\). En este caso se han considerado 4 variables dummys correspondientes a los días martes, miércoles, jueves y viernes para tratar de explicar la variabilidad de los rendimientos tomando como base el día lunes.
Se configura y ejecuta el modelo.
full_model_dax <- lm(rdto_dax ~ martes + miercoles + jueves + viernes, data = analysis_dax)
summary(full_model_dax)
##
## Call:
## lm(formula = rdto_dax ~ martes + miercoles + jueves + viernes,
## data = analysis_dax)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.136805 -0.005838 0.000177 0.006320 0.108268
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.0002937 0.0002466 -1.191 0.2337
## martes 0.0007084 0.0003488 2.031 0.0423 *
## miercoles 0.0007185 0.0003488 2.060 0.0394 *
## jueves 0.0004608 0.0003488 1.321 0.1865
## viernes 0.0008350 0.0003488 2.394 0.0167 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.01258 on 12995 degrees of freedom
## Multiple R-squared: 0.0005626, Adjusted R-squared: 0.000255
## F-statistic: 1.829 on 4 and 12995 DF, p-value: 0.1202
#El modelo con las 4 variables dummys introducidas como predictores tiene un valor de \(R_2\) bajo (0.00056). #El p-value del estadístico F no es significativo (0.1202). En los resultados se observa que el p-value de la prueba de hipótesis del estadístico t para el día jueves es 0.1865 (mayor que 0.05), lo que estaría indicando que la variabilidad de los rendimientos no está relacionada con la variabilidad de los jueves, al menos para estos datos.
Si se aplica la estrategia de stepwise mixto para selección de los mejores predictores, se obtiene que el mejor modelo es lm(formula = rdto_dax ~ martes + miercoles + viernes, data = analysis_dax), lo que refuerza la evidencia de que el día jueves no presenta valor explicativo.
step(object = full_model_dax, direction = "both", trace = 1)
## Start: AIC=-113769.2
## rdto_dax ~ martes + miercoles + jueves + viernes
##
## Df Sum of Sq RSS AIC
## - jueves 1 0.00027604 2.0556 -113769
## <none> 2.0554 -113769
## - martes 1 0.00065246 2.0560 -113767
## - miercoles 1 0.00067103 2.0560 -113767
## - viernes 1 0.00090646 2.0563 -113765
##
## Step: AIC=-113769.5
## rdto_dax ~ martes + miercoles + viernes
##
## Df Sum of Sq RSS AIC
## <none> 2.0556 -113769
## + jueves 1 0.00027604 2.0554 -113769
## - martes 1 0.00039611 2.0560 -113769
## - miercoles 1 0.00041287 2.0561 -113769
## - viernes 1 0.00063366 2.0563 -113767
##
## Call:
## lm(formula = rdto_dax ~ martes + miercoles + viernes, data = analysis_dax)
##
## Coefficients:
## (Intercept) martes miercoles viernes
## -6.332e-05 4.780e-04 4.881e-04 6.046e-04
Se ejecuta la regresión lineal considerando las variables dummys se los días martes, miércoles y viernes.
full_model_dax2 <- lm(formula = rdto_dax ~ martes + miercoles + viernes, data = analysis_dax)
summary(full_model_dax2)
##
## Call:
## lm(formula = rdto_dax ~ martes + miercoles + viernes, data = analysis_dax)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.137036 -0.005814 0.000063 0.006311 0.108038
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6.332e-05 1.744e-04 -0.363 0.7166
## martes 4.780e-04 3.021e-04 1.582 0.1136
## miercoles 4.881e-04 3.021e-04 1.616 0.1062
## viernes 6.046e-04 3.021e-04 2.002 0.0454 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.01258 on 12996 degrees of freedom
## Multiple R-squared: 0.0004284, Adjusted R-squared: 0.0001977
## F-statistic: 1.857 on 3 and 12996 DF, p-value: 0.1346
Al aplicar este modelo se obtiene el p-value de la prueba de hipótesis del estadístico t para el día viernes = 0.0454 (menor que 0.05), lo que estaría indicando, con un nivel de significancia de 0.05 que hay un efecto del día viernes.
Se generan los vectores de rendimiento para DAX y los vectores de los días martes a viernes.
n <- nrow(df_dax_nasdaq_dow_dummies)
rdto_dax <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"rdto_dax"]))
vardias_ma <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"martes"]))
vardias_mi <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"miercoles"]))
vardias_ju <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"jueves"]))
vardias_vi <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"viernes"]))
vardias <- cbind(vardias_ma,vardias_mi,vardias_ju,vardias_vi)
Se prueban distintos modelos para analizarlos, se analizan si los residuos son ruido blanco y se seleccionan los modelos mas adecuados.
spec_dax1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_dax1 <- ugarchfit(spec=spec_dax1,data=rdto_dax)
spec_dax1_2er <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_dax1_2er <- ugarchfit(spec=spec_dax1_2er,data=rdto_dax)
spec_dax2 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_dax2 <- ugarchfit(spec=spec_dax2,data=rdto_dax)
spec_dax2_2er <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_dax2_2er <- ugarchfit(spec=spec_dax2_2er,data=rdto_dax)
spec_dax3 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_dax3 <- ugarchfit(spec=spec_dax3,data=rdto_dax)
spec_dax3_2er <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_dax3_2er <- ugarchfit(spec=spec_dax3_2er,data=rdto_dax)
spec_dax4 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_dax4 <- ugarchfit(spec=spec_dax4,data=rdto_dax)
spec_dax4_2er <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_dax4_2er <- ugarchfit(spec=spec_dax4_2er,data=rdto_dax)
spec_dax5 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_dax5 <- ugarchfit(spec=spec_dax5,data=rdto_dax)
spec_dax5_2er <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_dax5_2er <- ugarchfit(spec=spec_dax5_2er,data=rdto_dax)
spec_dax6 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_dax6 <- ugarchfit(spec=spec_dax6,data=rdto_dax)
spec_dax6_2er <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_dax6_2er <- ugarchfit(spec=spec_dax6_2er,data=rdto_dax)
spec_dax1_ar1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_dax1_ar1 <- ugarchfit(spec=spec_dax1_ar1,data=rdto_dax)
spec_dax1_2er_ar1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_dax1_2er_ar1 <- ugarchfit(spec=spec_dax1_2er_ar1,data=rdto_dax)
spec_dax2_ar1 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_dax2_ar1 <- ugarchfit(spec=spec_dax2_ar1,data=rdto_dax)
spec_dax2_2er_ar1 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_dax2_2er_ar1 <- ugarchfit(spec=spec_dax2_2er_ar1,data=rdto_dax)
spec_dax3_ar1 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_dax3_ar1 <- ugarchfit(spec=spec_dax3_ar1,data=rdto_dax)
spec_dax3_2er_ar1 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "std")
garch_dax3_2er_ar1 <- ugarchfit(spec=spec_dax3_2er_ar1,data=rdto_dax)
spec_dax4_ar1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_dax4_ar1 <- ugarchfit(spec=spec_dax4_ar1,data=rdto_dax)
spec_dax4_2er_ar1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_dax4_2er_ar1 <- ugarchfit(spec=spec_dax4_2er_ar1,data=rdto_dax)
spec_dax5_ar1 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_dax5_ar1 <- ugarchfit(spec=spec_dax5_ar1,data=rdto_dax)
spec_dax5_2er_ar1 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_dax5_2er_ar1 <- ugarchfit(spec=spec_dax5_2er_ar1,data=rdto_dax)
spec_dax6_ar1 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = NULL, variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_dax6_ar1 <- ugarchfit(spec=spec_dax6_ar1,data=rdto_dax)
spec_dax6_2er_ar1 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1),
submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE),
mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
distribution.model = "norm")
garch_dax6_2er_ar1 <- ugarchfit(spec=spec_dax6_2er_ar1,data=rdto_dax)
| vmodel | vp | vq | vxreg | mp | mq | mxreg | dist | lb1 | lb2 | lb5 | ic1 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| garch_dax1 | sGARCH | 1 | 1 | 0 | 0 | 0 | 4 | std | 0.000000 | 0.000000 | 0.000006 | -6.317451 |
| garch_dax1_2er | sGARCH | 1 | 1 | 4 | 0 | 0 | 4 | std | 0.000000 | 0.000000 | 0.000001 | -5.990429 |
| garch_dax2 | gjrGARCH | 1 | 1 | 0 | 0 | 0 | 4 | std | 0.000000 | 0.000001 | 0.000010 | -6.327784 |
| garch_dax2_2er | gjrGARCH | 1 | 1 | 4 | 0 | 0 | 4 | std | 0.000000 | 0.000001 | 0.000010 | -6.327169 |
| garch_dax3 | eGARCH | 1 | 1 | 0 | 0 | 0 | 4 | std | 0.000001 | 0.000004 | 0.000042 | -6.326111 |
| garch_dax3_2er | eGARCH | 1 | 1 | 4 | 0 | 0 | 4 | std | 0.000001 | 0.000002 | 0.000019 | -6.327653 |
| garch_dax4 | sGARCH | 1 | 1 | 0 | 0 | 0 | 4 | norm | 0.000000 | 0.000001 | 0.000008 | -6.265282 |
| garch_dax4_2er | sGARCH | 1 | 1 | 4 | 0 | 0 | 4 | norm | 0.000000 | 0.000001 | 0.000008 | -6.264669 |
| garch_dax5 | gjrGARCH | 1 | 1 | 0 | 0 | 0 | 4 | norm | 0.000000 | 0.000000 | 0.000003 | -6.172693 |
| garch_dax5_2er | gjrGARCH | 1 | 1 | 4 | 0 | 0 | 4 | norm | 0.000000 | 0.000001 | 0.000011 | -6.279725 |
| garch_dax6 | eGARCH | 1 | 1 | 0 | 0 | 0 | 4 | norm | 0.000001 | 0.000005 | 0.000050 | -6.275521 |
| garch_dax6_2er | eGARCH | 1 | 1 | 4 | 0 | 0 | 4 | norm | 0.000001 | 0.000003 | 0.000032 | -6.283686 |
| garch_dax1_ar1 | sGARCH | 1 | 1 | 0 | 1 | 0 | 4 | std | 0.094100 | 0.167441 | 0.291146 | -6.318636 |
| garch_dax1_2er_ar1 | sGARCH | 1 | 1 | 4 | 1 | 0 | 4 | std | 0.000002 | 0.000008 | 0.000089 | -5.990624 |
| garch_dax2_ar1 | gjrGARCH | 1 | 1 | 0 | 1 | 0 | 4 | std | 0.000010 | 0.000033 | 0.000313 | -6.201730 |
| garch_dax2_2er_ar1 | gjrGARCH | 1 | 1 | 4 | 1 | 0 | 4 | std | 0.340867 | 0.314016 | 0.360710 | -6.328718 |
| garch_dax3_ar1 | eGARCH | 1 | 1 | 0 | 1 | 0 | 4 | std | 0.373114 | 0.316571 | 0.385930 | -6.327444 |
| garch_dax3_2er_ar1 | eGARCH | 1 | 1 | 4 | 1 | 0 | 4 | std | 0.285428 | 0.239729 | 0.311170 | -6.328957 |
| garch_dax4_ar1 | sGARCH | 1 | 1 | 0 | 1 | 0 | 4 | norm | 0.484296 | 0.507616 | 0.532465 | -6.266996 |
| garch_dax4_2er_ar1 | sGARCH | 1 | 1 | 4 | 1 | 0 | 4 | norm | 0.499077 | 0.515168 | 0.536846 | -6.266385 |
| garch_dax5_ar1 | gjrGARCH | 1 | 1 | 0 | 1 | 0 | 4 | norm | 0.000015 | 0.000036 | 0.000387 | -6.173821 |
| garch_dax5_2er_ar1 | gjrGARCH | 1 | 1 | 4 | 1 | 0 | 4 | norm | 0.941061 | 0.499009 | 0.458293 | -6.281795 |
| garch_dax6_ar1 | eGARCH | 1 | 1 | 0 | 1 | 0 | 4 | norm | 0.897624 | 0.469150 | 0.455372 | -6.277386 |
| garch_dax6_2er_ar1 | eGARCH | 1 | 1 | 4 | 1 | 0 | 4 | norm | 0.542325 | 0.330240 | 0.365667 | -6.285087 |
t_resumen_lb
| vmodel | vp | vq | vxreg | mp | mq | mxreg | dist | lb1 | lb2 | lb5 | ic1 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| garch_dax1 | sGARCH | 1 | 1 | 0 | 0 | 0 | 4 | std | 0.000000 | 0.000000 | 0.000006 | -6.317451 |
| garch_dax1_2er | sGARCH | 1 | 1 | 4 | 0 | 0 | 4 | std | 0.000000 | 0.000000 | 0.000001 | -5.990429 |
| garch_dax2 | gjrGARCH | 1 | 1 | 0 | 0 | 0 | 4 | std | 0.000000 | 0.000001 | 0.000010 | -6.327784 |
| garch_dax2_2er | gjrGARCH | 1 | 1 | 4 | 0 | 0 | 4 | std | 0.000000 | 0.000001 | 0.000010 | -6.327169 |
| garch_dax3 | eGARCH | 1 | 1 | 0 | 0 | 0 | 4 | std | 0.000001 | 0.000004 | 0.000042 | -6.326111 |
| garch_dax3_2er | eGARCH | 1 | 1 | 4 | 0 | 0 | 4 | std | 0.000001 | 0.000002 | 0.000019 | -6.327653 |
| garch_dax4 | sGARCH | 1 | 1 | 0 | 0 | 0 | 4 | norm | 0.000000 | 0.000001 | 0.000008 | -6.265282 |
| garch_dax4_2er | sGARCH | 1 | 1 | 4 | 0 | 0 | 4 | norm | 0.000000 | 0.000001 | 0.000008 | -6.264669 |
| garch_dax5 | gjrGARCH | 1 | 1 | 0 | 0 | 0 | 4 | norm | 0.000000 | 0.000000 | 0.000003 | -6.172693 |
| garch_dax5_2er | gjrGARCH | 1 | 1 | 4 | 0 | 0 | 4 | norm | 0.000000 | 0.000001 | 0.000011 | -6.279725 |
| garch_dax6 | eGARCH | 1 | 1 | 0 | 0 | 0 | 4 | norm | 0.000001 | 0.000005 | 0.000050 | -6.275521 |
| garch_dax6_2er | eGARCH | 1 | 1 | 4 | 0 | 0 | 4 | norm | 0.000001 | 0.000003 | 0.000032 | -6.283686 |
| garch_dax1_ar1 | sGARCH | 1 | 1 | 0 | 1 | 0 | 4 | std | 0.094100 | 0.167441 | 0.291146 | -6.318636 |
| garch_dax1_2er_ar1 | sGARCH | 1 | 1 | 4 | 1 | 0 | 4 | std | 0.000002 | 0.000008 | 0.000089 | -5.990624 |
| garch_dax2_ar1 | gjrGARCH | 1 | 1 | 0 | 1 | 0 | 4 | std | 0.000010 | 0.000033 | 0.000313 | -6.201730 |
| garch_dax2_2er_ar1 | gjrGARCH | 1 | 1 | 4 | 1 | 0 | 4 | std | 0.340867 | 0.314016 | 0.360710 | -6.328718 |
| garch_dax3_ar1 | eGARCH | 1 | 1 | 0 | 1 | 0 | 4 | std | 0.373114 | 0.316571 | 0.385930 | -6.327444 |
| garch_dax3_2er_ar1 | eGARCH | 1 | 1 | 4 | 1 | 0 | 4 | std | 0.285428 | 0.239729 | 0.311170 | -6.328957 |
| garch_dax4_ar1 | sGARCH | 1 | 1 | 0 | 1 | 0 | 4 | norm | 0.484296 | 0.507616 | 0.532465 | -6.266996 |
| garch_dax4_2er_ar1 | sGARCH | 1 | 1 | 4 | 1 | 0 | 4 | norm | 0.499077 | 0.515168 | 0.536846 | -6.266385 |
| garch_dax5_ar1 | gjrGARCH | 1 | 1 | 0 | 1 | 0 | 4 | norm | 0.000015 | 0.000036 | 0.000387 | -6.173821 |
| garch_dax5_2er_ar1 | gjrGARCH | 1 | 1 | 4 | 1 | 0 | 4 | norm | 0.941061 | 0.499009 | 0.458293 | -6.281795 |
| garch_dax6_ar1 | eGARCH | 1 | 1 | 0 | 1 | 0 | 4 | norm | 0.897624 | 0.469150 | 0.455372 | -6.277386 |
| garch_dax6_2er_ar1 | eGARCH | 1 | 1 | 4 | 1 | 0 | 4 | norm | 0.542325 | 0.330240 | 0.365667 | -6.285087 |
tabla_ljung_box <- as_tibble(t_comp_lb)
tabla <- tabla_ljung_box %>% filter(lb1 > 0.05, lb2 > 0.05, lb5 > 0.05)
tabla <- arrange(tabla, desc(ic1))
# tabla con valores de Ljung Box adecuados
t_resumen_lb <- knitr::kable(tabla,
digits = 6,
caption = "Modelos con valores adecuados del Ljung-Box test", booktabs = TRUE) %>%
kable_styling(font_size = 11)
column_spec(t_resumen_lb, 1:7, width = "7em")#, bold = TRUE, italic = TRUE)
| vmodel | vp | vq | vxreg | mp | mq | mxreg | dist | lb1 | lb2 | lb5 | ic1 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| sGARCH | 1 | 1 | 4 | 1 | 0 | 4 | norm | 0.499077 | 0.515168 | 0.536846 | -6.266385 |
| sGARCH | 1 | 1 | 0 | 1 | 0 | 4 | norm | 0.484296 | 0.507616 | 0.532465 | -6.266996 |
| eGARCH | 1 | 1 | 0 | 1 | 0 | 4 | norm | 0.897624 | 0.469150 | 0.455372 | -6.277386 |
| gjrGARCH | 1 | 1 | 4 | 1 | 0 | 4 | norm | 0.941061 | 0.499009 | 0.458293 | -6.281795 |
| eGARCH | 1 | 1 | 4 | 1 | 0 | 4 | norm | 0.542325 | 0.330240 | 0.365667 | -6.285087 |
| sGARCH | 1 | 1 | 0 | 1 | 0 | 4 | std | 0.094100 | 0.167441 | 0.291146 | -6.318636 |
| eGARCH | 1 | 1 | 0 | 1 | 0 | 4 | std | 0.373114 | 0.316571 | 0.385930 | -6.327444 |
| gjrGARCH | 1 | 1 | 4 | 1 | 0 | 4 | std | 0.340867 | 0.314016 | 0.360710 | -6.328718 |
| eGARCH | 1 | 1 | 4 | 1 | 0 | 4 | std | 0.285428 | 0.239729 | 0.311170 | -6.328957 |
vmodel= modelo GARCH implementado.
vp= orden p del modelo de la varianza ARCH .
vq= orden q del modelo de la varianza GARCH.
vxreg= cantidad de regresores externos en el modelo de la varianza.
mp= orden p del modelo de la media AR.
mq= orden q del modelo de la media MA.
mxreg= cantidad de regresores externos en el modelo de la media.
dist= distribución que siguen los errores.
lb1= valor del test de Ljung-Box para el rezago uno.
lb2= valor del test de Ljung-Box para el rezago dos.
lb5= valor del test de Ljung-Box para el rezago cinco.
ic1= valor de akaike del modelo.
Para poder analizar los modelos y elegir el mejor, debemos observar los valores del test de Ljung-Box y el de los criterios de información. En el caso del test de Ljung-Box buscamos un valor mayor a 0.05 que nos indique que los residuos del modelo son ruido blanco y no contienen información significativa. En la tabla se observan solo los modelos que cumplen con este filtro. Se muestran los valores del test para los rezagos uno, dos y cinco (lb1, lb2, lb5). Respecto a los criterios de información, en la tabla se muestra el valor de akaike de los modelos (ic1). El mejor modelo es el modelo con menor valor de akaike, por ello la tabla se encuentra ordenada de forma descendiente de acuerdo a este valor.
Siguiendo estas indicaciones se puede observar que los dos mejores modelos son:
1_ gjrGARCH con GARCH(1,1), ARMA(1,0), distribucion std y ER en media y varianza (garch_dax2_2er_ar1)
2_ eGARCH con GARCH(1,1), ARMA(1,0), distribucion std y ER en media y varianza (garch_dax3_2er_ar1)
Parámetros de los dos mejores modelos y sus valores de significancia:
garch_dax2_2er_ar1
##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : gjrGARCH(1,1)
## Mean Model : ARFIMA(1,0,0)
## Distribution : std
##
## Optimal Parameters
## ------------------------------------
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000172 0.000115 -1.492022 0.135693
## ar1 0.042133 0.008863 4.754040 0.000002
## mxreg1 0.000544 0.000185 2.938044 0.003303
## mxreg2 0.000601 0.000173 3.466721 0.000527
## mxreg3 0.000512 0.000209 2.448639 0.014340
## mxreg4 0.001050 0.000199 5.268805 0.000000
## omega 0.000002 0.000000 6.598318 0.000000
## alpha1 0.033631 0.001415 23.772123 0.000000
## beta1 0.907123 0.002865 316.593061 0.000000
## gamma1 0.094642 0.006892 13.731889 0.000000
## vxreg1 0.000000 0.000000 0.156642 0.875527
## vxreg2 0.000000 0.000000 0.083505 0.933450
## vxreg3 0.000000 0.000000 0.000123 0.999902
## vxreg4 0.000000 0.000000 0.122308 0.902655
## shape 8.235425 0.535707 15.372991 0.000000
##
## Robust Standard Errors:
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000172 0.000149 -1.156629 0.247424
## ar1 0.042133 0.008327 5.059926 0.000000
## mxreg1 0.000544 0.000239 2.281173 0.022538
## mxreg2 0.000601 0.000152 3.947074 0.000079
## mxreg3 0.000512 0.000285 1.799203 0.071987
## mxreg4 0.001050 0.000338 3.109423 0.001875
## omega 0.000002 0.000001 2.905318 0.003669
## alpha1 0.033631 0.002747 12.240727 0.000000
## beta1 0.907123 0.002932 309.371851 0.000000
## gamma1 0.094642 0.007329 12.913101 0.000000
## vxreg1 0.000000 0.000000 0.137540 0.890604
## vxreg2 0.000000 0.000000 0.084171 0.932921
## vxreg3 0.000000 0.000000 0.000063 0.999950
## vxreg4 0.000000 0.000000 0.102968 0.917988
## shape 8.235425 0.742593 11.090094 0.000000
##
## LogLikelihood : 41148.5
##
## Information Criteria
## ------------------------------------
##
## Akaike -6.3287
## Bayes -6.3201
## Shibata -6.3287
## Hannan-Quinn -6.3258
##
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.9072 0.3409
## Lag[2*(p+q)+(p+q)-1][2] 1.6119 0.3777
## Lag[4*(p+q)+(p+q)-1][5] 3.0964 0.4074
## d.o.f=1
## H0 : No serial correlation
##
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.9113 0.3398
## Lag[2*(p+q)+(p+q)-1][5] 2.7225 0.4601
## Lag[4*(p+q)+(p+q)-1][9] 3.3543 0.6993
## d.o.f=2
##
## Weighted ARCH LM Tests
## ------------------------------------
## Statistic Shape Scale P-Value
## ARCH Lag[3] 2.460 0.500 2.000 0.1168
## ARCH Lag[5] 2.469 1.440 1.667 0.3766
## ARCH Lag[7] 2.629 2.315 1.543 0.5861
##
## Nyblom stability test
## ------------------------------------
## Joint Statistic: 766.5684
## Individual Statistics:
## mu 1.61180
## ar1 5.28223
## mxreg1 0.35052
## mxreg2 0.33720
## mxreg3 0.10261
## mxreg4 0.11072
## omega 116.99358
## alpha1 0.48910
## beta1 0.82772
## gamma1 1.52229
## vxreg1 0.99601
## vxreg2 0.09621
## vxreg3 0.11440
## vxreg4 0.30238
## shape 0.74327
##
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic: 3.26 3.54 4.07
## Individual Statistic: 0.35 0.47 0.75
##
## Sign Bias Test
## ------------------------------------
## t-value prob sig
## Sign Bias 1.2019 0.2294178
## Negative Sign Bias 0.7438 0.4569971
## Positive Sign Bias 2.8380 0.0045471 ***
## Joint Effect 18.4829 0.0003497 ***
##
##
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
## group statistic p-value(g-1)
## 1 20 165.6 2.062e-25
## 2 30 192.9 4.016e-26
## 3 40 211.4 1.523e-25
## 4 50 240.0 5.532e-27
##
##
## Elapsed time : 15.67303
garch_dax3_2er_ar1
##
## *---------------------------------*
## * GARCH Model Fit *
## *---------------------------------*
##
## Conditional Variance Dynamics
## -----------------------------------
## GARCH Model : eGARCH(1,1)
## Mean Model : ARFIMA(1,0,0)
## Distribution : std
##
## Optimal Parameters
## ------------------------------------
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000240 0.000127 -1.8807 0.060011
## ar1 0.038884 0.009186 4.2330 0.000023
## mxreg1 0.000630 0.000210 3.0022 0.002681
## mxreg2 0.000652 0.000163 3.9988 0.000064
## mxreg3 0.000548 0.000204 2.6916 0.007112
## mxreg4 0.001038 0.000215 4.8310 0.000001
## omega 0.077827 0.044131 1.7635 0.077809
## alpha1 -0.065540 0.005201 -12.6024 0.000000
## beta1 0.985538 0.000380 2591.4844 0.000000
## gamma1 0.153685 0.008367 18.3680 0.000000
## vxreg1 -0.297373 0.076028 -3.9114 0.000092
## vxreg2 -0.211111 0.061792 -3.4165 0.000634
## vxreg3 -0.291755 0.061894 -4.7138 0.000002
## vxreg4 -0.249161 0.076059 -3.2759 0.001053
## shape 8.036470 0.546105 14.7160 0.000000
##
## Robust Standard Errors:
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000240 0.000100 -2.3860 0.017034
## ar1 0.038884 0.009342 4.1622 0.000032
## mxreg1 0.000630 0.000202 3.1236 0.001786
## mxreg2 0.000652 0.000107 6.1007 0.000000
## mxreg3 0.000548 0.000180 3.0403 0.002363
## mxreg4 0.001038 0.000202 5.1347 0.000000
## omega 0.077827 0.047895 1.6249 0.104175
## alpha1 -0.065540 0.006827 -9.5997 0.000000
## beta1 0.985538 0.000233 4226.4314 0.000000
## gamma1 0.153685 0.010351 14.8471 0.000000
## vxreg1 -0.297373 0.082046 -3.6245 0.000290
## vxreg2 -0.211111 0.062542 -3.3755 0.000737
## vxreg3 -0.291755 0.062887 -4.6394 0.000003
## vxreg4 -0.249161 0.081558 -3.0550 0.002251
## shape 8.036470 0.762160 10.5443 0.000000
##
## LogLikelihood : 41150.06
##
## Information Criteria
## ------------------------------------
##
## Akaike -6.3290
## Bayes -6.3203
## Shibata -6.3290
## Hannan-Quinn -6.3261
##
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 1.141 0.2854
## Lag[2*(p+q)+(p+q)-1][2] 1.999 0.2137
## Lag[4*(p+q)+(p+q)-1][5] 3.670 0.2829
## d.o.f=1
## H0 : No serial correlation
##
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
## statistic p-value
## Lag[1] 0.007379 0.9315
## Lag[2*(p+q)+(p+q)-1][5] 5.269552 0.1329
## Lag[4*(p+q)+(p+q)-1][9] 7.003394 0.1989
## d.o.f=2
##
## Weighted ARCH LM Tests
## ------------------------------------
## Statistic Shape Scale P-Value
## ARCH Lag[3] 8.342 0.500 2.000 0.003875
## ARCH Lag[5] 8.888 1.440 1.667 0.012254
## ARCH Lag[7] 8.955 2.315 1.543 0.032006
##
## Nyblom stability test
## ------------------------------------
## Joint Statistic: 20.4393
## Individual Statistics:
## mu 2.01931
## ar1 4.76420
## mxreg1 0.48328
## mxreg2 0.54510
## mxreg3 0.14589
## mxreg4 0.05707
## omega 1.88742
## alpha1 6.18375
## beta1 1.84458
## gamma1 0.93408
## vxreg1 1.66075
## vxreg2 1.95935
## vxreg3 2.13957
## vxreg4 1.93029
## shape 0.88460
##
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic: 3.26 3.54 4.07
## Individual Statistic: 0.35 0.47 0.75
##
## Sign Bias Test
## ------------------------------------
## t-value prob sig
## Sign Bias 0.549903 0.5823957
## Negative Sign Bias 0.006882 0.9945094
## Positive Sign Bias 2.959763 0.0030843 ***
## Joint Effect 16.647198 0.0008352 ***
##
##
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
## group statistic p-value(g-1)
## 1 20 162.3 9.215e-25
## 2 30 188.6 2.555e-25
## 3 40 217.4 1.269e-26
## 4 50 227.2 9.112e-25
##
##
## Elapsed time : 21.04096
Tabla comparativa de los p-valores de los external regressors para los dos mejores modelos.
El primer modelo seleccionado es gjrGARCH(1,1) con ARMA(1,0) como modelo de media y distribución std. Se han incluido regresores externos como variables dummys tanto en media como en varianza.
t_modelo_dax2 <- print(round(garch_dax2_2er_ar1@fit$matcoef,6), digits = 5)
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000172 0.000115 -1.492022 0.135693
## ar1 0.042133 0.008863 4.754040 0.000002
## mxreg1 0.000544 0.000185 2.938044 0.003303
## mxreg2 0.000601 0.000173 3.466721 0.000527
## mxreg3 0.000512 0.000209 2.448639 0.014340
## mxreg4 0.001050 0.000199 5.268805 0.000000
## omega 0.000002 0.000000 6.598318 0.000000
## alpha1 0.033631 0.001415 23.772123 0.000000
## beta1 0.907123 0.002865 316.593061 0.000000
## gamma1 0.094642 0.006892 13.731889 0.000000
## vxreg1 0.000000 0.000000 0.156642 0.875527
## vxreg2 0.000000 0.000000 0.083505 0.933450
## vxreg3 0.000000 0.000000 0.000123 0.999902
## vxreg4 0.000000 0.000000 0.122308 0.902655
## shape 8.235425 0.535707 15.372991 0.000000
kable(t_modelo_dax2, row.names = TRUE)
| Estimate | Std. Error | t value | Pr(>|t|) | |
|---|---|---|---|---|
| mu | -0.000172 | 0.000115 | -1.492022 | 0.135693 |
| ar1 | 0.042133 | 0.008863 | 4.754040 | 0.000002 |
| mxreg1 | 0.000544 | 0.000185 | 2.938044 | 0.003303 |
| mxreg2 | 0.000601 | 0.000173 | 3.466721 | 0.000527 |
| mxreg3 | 0.000512 | 0.000209 | 2.448639 | 0.014340 |
| mxreg4 | 0.001050 | 0.000199 | 5.268805 | 0.000000 |
| omega | 0.000002 | 0.000000 | 6.598318 | 0.000000 |
| alpha1 | 0.033631 | 0.001415 | 23.772123 | 0.000000 |
| beta1 | 0.907123 | 0.002865 | 316.593061 | 0.000000 |
| gamma1 | 0.094642 | 0.006892 | 13.731889 | 0.000000 |
| vxreg1 | 0.000000 | 0.000000 | 0.156642 | 0.875527 |
| vxreg2 | 0.000000 | 0.000000 | 0.083505 | 0.933450 |
| vxreg3 | 0.000000 | 0.000000 | 0.000123 | 0.999902 |
| vxreg4 | 0.000000 | 0.000000 | 0.122308 | 0.902655 |
| shape | 8.235425 | 0.535707 | 15.372991 | 0.000000 |
# muestro la tabla resumen del modelo y valores de Ljung-Box test de los residuos del modelo
t_modelo2 <- knitr::kable(t_modelo_dax2,
digits = 6,
caption = "Modelo gjrGARCH(1,1) con ARMA(1,0)", booktabs = TRUE) %>%
kable_styling(font_size = 11)
column_spec(t_modelo2, 1:5, width = "1em")#, bold = TRUE, italic = TRUE)
| Estimate | Std. Error | t value | Pr(>|t|) | |
|---|---|---|---|---|
| mu | -0.000172 | 0.000115 | -1.492022 | 0.135693 |
| ar1 | 0.042133 | 0.008863 | 4.754040 | 0.000002 |
| mxreg1 | 0.000544 | 0.000185 | 2.938044 | 0.003303 |
| mxreg2 | 0.000601 | 0.000173 | 3.466721 | 0.000527 |
| mxreg3 | 0.000512 | 0.000209 | 2.448639 | 0.014340 |
| mxreg4 | 0.001050 | 0.000199 | 5.268805 | 0.000000 |
| omega | 0.000002 | 0.000000 | 6.598318 | 0.000000 |
| alpha1 | 0.033631 | 0.001415 | 23.772123 | 0.000000 |
| beta1 | 0.907123 | 0.002865 | 316.593061 | 0.000000 |
| gamma1 | 0.094642 | 0.006892 | 13.731889 | 0.000000 |
| vxreg1 | 0.000000 | 0.000000 | 0.156642 | 0.875527 |
| vxreg2 | 0.000000 | 0.000000 | 0.083505 | 0.933450 |
| vxreg3 | 0.000000 | 0.000000 | 0.000123 | 0.999902 |
| vxreg4 | 0.000000 | 0.000000 | 0.122308 | 0.902655 |
| shape | 8.235425 | 0.535707 | 15.372991 | 0.000000 |
De acuerdo a los p-valores se observa que los regresores externos son significativos, se observa por ejemplo, que el poder explicativo del día viernes es del 0,1%. De acuerdo al valor de \(alpha1\) el rendimiento es explicado en un 3.36% por la volatilidad del día anterior. De acuerdo al valor de \(beta1\) el rendimiento es explicado en un 90.7% por la varianza ajustada del día anterior.
El siguiente modelo seleccionado es eGARCH(1,1) con ARMA(1,0) como modelo de media y distribución std.
Se han incluido regresores externos como variables dummys tanto en media como en varianza.
t_modelo_dax3 <- print(round(garch_dax3_2er_ar1@fit$matcoef,6), digits = 5)
## Estimate Std. Error t value Pr(>|t|)
## mu -0.000240 0.000127 -1.8807 0.060011
## ar1 0.038884 0.009186 4.2330 0.000023
## mxreg1 0.000630 0.000210 3.0022 0.002681
## mxreg2 0.000652 0.000163 3.9988 0.000064
## mxreg3 0.000548 0.000204 2.6916 0.007112
## mxreg4 0.001038 0.000215 4.8310 0.000001
## omega 0.077827 0.044131 1.7635 0.077809
## alpha1 -0.065540 0.005201 -12.6024 0.000000
## beta1 0.985538 0.000380 2591.4844 0.000000
## gamma1 0.153685 0.008367 18.3680 0.000000
## vxreg1 -0.297373 0.076028 -3.9114 0.000092
## vxreg2 -0.211111 0.061792 -3.4165 0.000634
## vxreg3 -0.291755 0.061894 -4.7138 0.000002
## vxreg4 -0.249161 0.076059 -3.2759 0.001053
## shape 8.036470 0.546105 14.7160 0.000000
kable(t_modelo_dax3, row.names = TRUE)
| Estimate | Std. Error | t value | Pr(>|t|) | |
|---|---|---|---|---|
| mu | -0.000240 | 0.000127 | -1.880713 | 0.060011 |
| ar1 | 0.038884 | 0.009186 | 4.233036 | 0.000023 |
| mxreg1 | 0.000630 | 0.000210 | 3.002166 | 0.002681 |
| mxreg2 | 0.000652 | 0.000163 | 3.998761 | 0.000064 |
| mxreg3 | 0.000548 | 0.000204 | 2.691568 | 0.007112 |
| mxreg4 | 0.001038 | 0.000215 | 4.830983 | 0.000001 |
| omega | 0.077827 | 0.044131 | 1.763544 | 0.077809 |
| alpha1 | -0.065540 | 0.005201 | -12.602388 | 0.000000 |
| beta1 | 0.985538 | 0.000380 | 2591.484352 | 0.000000 |
| gamma1 | 0.153685 | 0.008367 | 18.368034 | 0.000000 |
| vxreg1 | -0.297373 | 0.076028 | -3.911351 | 0.000092 |
| vxreg2 | -0.211111 | 0.061792 | -3.416460 | 0.000634 |
| vxreg3 | -0.291755 | 0.061894 | -4.713810 | 0.000002 |
| vxreg4 | -0.249161 | 0.076059 | -3.275907 | 0.001053 |
| shape | 8.036470 | 0.546105 | 14.715983 | 0.000000 |
# muestro la tabla resumen del modelo y valores de Ljung-Box test de los residuos del modelo
t_modelo3 <- knitr::kable(t_modelo_dax3,
digits = 6,
caption = "Modelo eGARCH(1,1) con ARMA(1,0)", booktabs = TRUE) %>%
kable_styling(font_size = 11)
column_spec(t_modelo3, 1:5, width = "1em")#, bold = TRUE, italic = TRUE)
| Estimate | Std. Error | t value | Pr(>|t|) | |
|---|---|---|---|---|
| mu | -0.000240 | 0.000127 | -1.880713 | 0.060011 |
| ar1 | 0.038884 | 0.009186 | 4.233036 | 0.000023 |
| mxreg1 | 0.000630 | 0.000210 | 3.002166 | 0.002681 |
| mxreg2 | 0.000652 | 0.000163 | 3.998761 | 0.000064 |
| mxreg3 | 0.000548 | 0.000204 | 2.691568 | 0.007112 |
| mxreg4 | 0.001038 | 0.000215 | 4.830983 | 0.000001 |
| omega | 0.077827 | 0.044131 | 1.763544 | 0.077809 |
| alpha1 | -0.065540 | 0.005201 | -12.602388 | 0.000000 |
| beta1 | 0.985538 | 0.000380 | 2591.484352 | 0.000000 |
| gamma1 | 0.153685 | 0.008367 | 18.368034 | 0.000000 |
| vxreg1 | -0.297373 | 0.076028 | -3.911351 | 0.000092 |
| vxreg2 | -0.211111 | 0.061792 | -3.416460 | 0.000634 |
| vxreg3 | -0.291755 | 0.061894 | -4.713810 | 0.000002 |
| vxreg4 | -0.249161 | 0.076059 | -3.275907 | 0.001053 |
| shape | 8.036470 | 0.546105 | 14.715983 | 0.000000 |
Para este modelo también se observa que los p-valores de los regresores son significativos y que el poder explicativo del día viernes es del 0,1%.
De acuerdo al valor de \(alpha1\) el rendimiento es explicado en un 6.55% por la volatilidad del día anterior. De acuerdo al valor de \(beta1\) el rendimiento es explicado en un 98.5% por la varianza ajustada del día anterior.
Como conclusión se verifica que hay un leve efecto “día de la semana” y con un poder explicativo del 0,1% se considera que el día viernes es el más rentable.
Por lo tanto se asume que el eGARCH(1,1) con ARMA(1,0) podría ser una alternativa para realizar pronósticos de los rendimientos de DAX.
Para el dataset DAX se concluye que tanto en la ejecución de la Regresión mínimo cuadrática como al incorpor la ecuación de varianza como modelo GARCH, se detecta que el día jueves no posee valor explicativo para los valores de los rendimientos y, al ejecutar la regresión lineal considerando las variables dummys se los días martes, miércoles y viernes, se observa que el día viernes presenta mayor poder explicativo que los demás días.
Se considera conveniente incorporar los GARCH porque los coeficientes de \(alpha1\) y \(beta1\) dan significativos, y esto ademas permite ver el comportamiento de la varianza.